////#include <stdio.h>
////#include <string.h>
////
////#include <iostream>
////#include <string>
////#include <vector>
////
////#include <unistd.h>
////#include <sys/types.h>

using namespace std;

int main(void){
    //cout << "我是一个进程" << endl;
    //while(1){
        //cout << "我是一个进程" << endl; 
        //printf("我是一个进程！，pid: %d, ppid: %d\n", getpid(), getppid());
        //sleep(1);
    //}

    // 创建子进程 -- fork是一个函数 -- 函数执行前: 只有一个父进程 -- 函数执行后: 父进程+子进程
    //pid_t id = fork();
    // 同一个变量id， 在后续不会被修改的情况下，竟然有不同的内容！
    //printf("我是一个进程！，pid: %d, ppid: %d, id: %d\n", getpid(), getppid(), id);
    //sleep(1);


    // if()  else if() 两种情况的代码同时执行了
    // fork() 之后，会有父进程+子进程两个进程在执行后续的代码
    // fork() 之后，后续的代码，被父子进程共享
    // 通过返回值不同，让父子进程执行后续共享的代码的一部分
    pid_t id = fork();
    if(id == 0){
        //子进程
        while(1){
            printf("子进程, pid: %d, ppid: %d, id: %d\n", getpid(), getppid(), id);
            sleep(1);
        }
    }
    else if(id > 0){
        // parent
        while(1){
            printf("父进程, pid: %d, ppid: %d, id: %d\n", getpid(), getppid(), id);
            sleep(2);
        }
    }
    else{ }

    sleep(2);

	return 0;
}


// 进程状态：
//int main(void){
    // 下面的代码，更多的是 cpu 在执行代码，所以查到的进程状态一般都是 R（运行状态）
    //int a = 0;
    //while(1){
    //    a++;
    //}

    // 下面的代码，更多的时间在访问外部 io 设备，所以查到的进程状态一般都是 S（睡眠状态）
    //int a = 0;
    //while(1){
    //    a++;
    //    printf("hello world\n");
    //}

  //  return 0;
//}
//
